#include "matrix_key.h"
#include "time.h"
extern char mtri_key_value;

//矩阵键盘横向行：PB14 PE13 PE7 PA8-------纵向列：PA15 PD0 PD3 PE2
void matrixKeyInit(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//时钟使能
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
	
	//设置GPIO_Mode_OUT各个引脚参数
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//寄存器输出模式
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉电阻设置默认电位
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_14;	
	GPIO_Init(GPIOB,&GPIO_InitStruct);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;	
	GPIO_Init(GPIOE,&GPIO_InitStruct);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7;	
	GPIO_Init(GPIOE,&GPIO_InitStruct);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;	
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	GPIO_SetBits(GPIOB, GPIO_Pin_14);
	GPIO_SetBits(GPIOE, GPIO_Pin_13);
	GPIO_SetBits(GPIOE, GPIO_Pin_7);
	GPIO_SetBits(GPIOA, GPIO_Pin_8);
	
	//设置GPIO_Mode_IN各个引脚参数
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;//寄存器输出模式
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉电阻设置默认电位
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;	
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;	
	GPIO_Init(GPIOD,&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;	
	GPIO_Init(GPIOD,&GPIO_InitStruct);

	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2;	
	GPIO_Init(GPIOE,&GPIO_InitStruct);
}

//矩形键盘扫描
void matrixKeyScan(void)
{
	GPIO_ResetBits(GPIOB, GPIO_Pin_14);
	GPIO_SetBits(GPIOE, GPIO_Pin_13);
	GPIO_SetBits(GPIOE, GPIO_Pin_7);
	GPIO_SetBits(GPIOA, GPIO_Pin_8);
	
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0);
			mtri_key_value = '1';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
			mtri_key_value = '2';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0);
			mtri_key_value = '3';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0);
			mtri_key_value = 'A';
		}
	}
	
	//第二行
	GPIO_SetBits(GPIOB, GPIO_Pin_14);
	GPIO_ResetBits(GPIOE, GPIO_Pin_13);
	GPIO_SetBits(GPIOE, GPIO_Pin_7);
	GPIO_SetBits(GPIOA, GPIO_Pin_8);
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0);
			mtri_key_value = '4';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
			mtri_key_value = '5';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0);
			mtri_key_value = '6';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0);
			mtri_key_value = 'B';
		}
	}
	//第三行
	GPIO_SetBits(GPIOB, GPIO_Pin_14);
	GPIO_SetBits(GPIOE, GPIO_Pin_13);
	GPIO_ResetBits(GPIOE, GPIO_Pin_7);
	GPIO_SetBits(GPIOA, GPIO_Pin_8);
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0);
			mtri_key_value = '7';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
			mtri_key_value = '8';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0);
			mtri_key_value = '9';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0);
			mtri_key_value = 'C';
		}
	}
	//第四行
	GPIO_SetBits(GPIOB, GPIO_Pin_14);
	GPIO_SetBits(GPIOE, GPIO_Pin_13);
	GPIO_SetBits(GPIOE, GPIO_Pin_7);
	GPIO_ResetBits(GPIOA, GPIO_Pin_8);
	if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_15) == 0);
			mtri_key_value = '*';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_0) == 0);
			mtri_key_value = '0';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_3) == 0);
			mtri_key_value = '#';
		}
	}
	else if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
	{
		myDelayMs(30);
		if(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0)
		{
			while(GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2) == 0);
			mtri_key_value = 'D';
		}
	}
}


